5014
9055
Zamknięte. To pytanie wymaga szczegółów lub jasności. Obecnie nie przyjmuje odpowiedzi.
Chcesz poprawić to pytanie? Dodaj szczegóły i wyjaśnij problem, edytując ten post.
Zamknięte 1 rok temu.
Popraw to pytanie
Robię wyzwanie kodu i chcę uzyskać pierwsze 3 wartości z mojej tablicy, określając indeks początkowy i pobierając tylko pierwsze (3 lub mogą mieć dowolną długość) wartości z indeksu początkowego.
Wypróbowałem ten kod i działa, ale struktura kodu jest zbyt długa, więc jak mogę skrócić ten kod, aby był łatwy do zrozumienia.
int n = 10;
double signature = new double [] {1, 1, 1};
double [] ret = new double [n];
podwójna suma = 0;
ret [0] = podpis [0];
ret [1] = podpis [1];
ret [2] = podpis [2];
int x, i;
for (i = 0; i 
                                
Korzystając z LINQ, możesz spróbować czegoś takiego:
var values ​​= array.Skip (index)
.Wzięty)
.ToArray ();
Gdzie indeks jest indeksem pierwszego elementu, a n liczbą elementów, które chcesz wybrać.
Na przykład. https://dotnetfiddle.net/Pk1rwY
Na marginesie. Korzystanie z LINQ nie oznacza, że ​​kod byłby szybszy. Byłby bardziej zwarty / czytelny itp. Aby ocenić wydajność kodu, musisz użyć czegoś takiego jak BenchmarkDotNet.
|
Brak rozwiązania Linq:
private static T [] Extract  (T [] source, int fromIndex, int length) {
if (null == źródło)
zgłoś nowy ArgumentNullException (nameof (source));
else if (fromIndex <0)
wrzuć nowy ArgumentOutOfRangeException (nameof (fromIndex),
„From Index musi być nieujemna”);
else if (długość <0)
wrzuć nowy ArgumentOutOfRangeException (nameof (length),
„Długość musi być nieujemna”);
if (fromIndex> = source.Length || length == 0)
zwraca nowe T [0];
T [] wynik = nowy T [Math.Min (length, source.Length - fromIndex)];
Array.Copy (source, fromIndex, result, 0, result.Length);
wynik zwrotu;
}
Następnie
double [] signature = new double [] {0, 1, 2, 3, 4, 5};
double [] ret = Extract (podpis, 3, 2);
Console.Write (string.Join (",", ret));
Wynik:
3, 4
|
Z twojego pytania, musisz skorzystać z operatorów .Take i .Skip.
var result = array.Skip (startIndex) .Take (numberOfElements);
Z twojego kodu wynika, że ​​próbujesz zrobić coś innego, a mianowicie sumowanie elementów. W tym przypadku pomocny może być operator .Sum.
|
Nie szukasz odpowiedzi? Przeglądaj inne pytania oznaczone tagami C # tablice linq lub zadaj własne pytanie.